/**
 * @param {string} s
 * @return {string[][]}
 */
 var partition = function(s) {
    // 定义函数是不是回文字符串
    const isPalidrome = function(s,i,j){
      for(;i < j;i++,j--){
        if(s[i] !== s[j]){
          return false
        }
      }
      return true
    }
    // 回溯法
    // 参数 切割位置
    // 退出条件 切割位置就是结束位置 就把路径放入
    // 单层逻辑 判断这个是不会回文字符串 如果不是回文字符串 就continue 判断下一个切割位置是不是
    // 如果是 就递归调用 回溯函数 
    // 最后回溯出去
    let res = []
    let path = []
    const backTracking = function(startIndex){
      if(startIndex >= s.length){
        res.push([...path])
        return
      }
      for(let i = startIndex;i < s.length;i++){
        if(!isPalidrome(s,startIndex,i)){
          continue
        }
        path.push(s.slice(startIndex,i+1)) // 从哪截取到哪 最后一个不取
        backTracking(startIndex + 1) // 不能取同一个值
        path.pop()
      }
    }
    backTracking(0)
    return res
};